﻿using System;
using System.Collections.Generic;
using Microsoft.Extensions.Caching.Memory;
using System.Linq;
using System.Net.Mail;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace socialnetworkApp.Core.QQSendEmailConfig
{
    public class SendEmailService : ISendEmailService
    {

        private readonly IMemoryCache _memoryCache;
        public SendEmailService(IMemoryCache memoryCache) { 
        _memoryCache = memoryCache;
        }

        public bool LoginSendEmail(string SendAddress, string Title, string Body)
        {
            //实例化一个发送邮件类。
            MailMessage mailMessage = new MailMessage();
            //发件人邮箱地址，方法重载不同，可以根据需求自行选择。
            mailMessage.From = new MailAddress("3376644696@qq.com");
            //收件人邮箱地址。
            mailMessage.To.Add(new MailAddress(SendAddress));
            //抄送人邮箱地址。
            //message.CC.Add(sender);
            //邮件标题。
            mailMessage.Subject = Title;
            //邮件内容。
            mailMessage.Body = Body;
            //是否支持内容为HTML。
            //mailMessage.IsBodyHtml = true;
            //实例化一个SmtpClient类。
            SmtpClient client = new SmtpClient();
            client.Port = 587;
            //在这里使用的是qq邮箱，所以是smtp.qq.com，如果你使用的是126邮箱，那么就是smtp.126.com。
            //client.Host = "smtp.163.com";
            client.Host = "smtp.qq.com";
            //使用安全加密连接（是否启用SSL）
            client.EnableSsl = true;
            //设置超时时间
            //client.Timeout = 10000;
            //不和请求一块发送。
            client.UseDefaultCredentials = false;
            //验证发件人身份(发件人的邮箱，邮箱里的生成授权码);
            client.Credentials = new NetworkCredential("3376644696@qq.com", "wrxllylakkqzdbja");//szcodirtgvjgbfii
                                                                                                //网易邮箱客户端授权码DJURBEKTXEWXQATX
                                                                                                //client.Credentials = new NetworkCredential("liulijun3236@163.com", "ZAJDNCKWHUBHQIMY");
            try
            {
                //发送
                client.Send(mailMessage);
                return true;
                //发送成功
            }
            catch (Exception)//发送异常
            {
                //发送失败
                //System.IO.File.WriteAllText(@"C:\test.txt", e.ToString(), Encoding.UTF8);
                return false;
            }
        }

        private string VerifyCode()
        {
            Random random = new Random();
            return random.Next(100000, 999999).ToString();
        }

        public bool ValidateCodeSendEmail(string SendAddress)
        {
            //实例化一个发送邮件类。
            MailMessage mailMessage = new MailMessage();
            //发件人邮箱地址，方法重载不同，可以根据需求自行选择。
            mailMessage.From = new MailAddress("3534291457@qq.com");
            //mailMessage.From = new MailAddress("百色学院吧");
            //收件人邮箱地址。
            mailMessage.To.Add(new MailAddress(SendAddress));
            //抄送人邮箱地址。
            //message.CC.Add(sender);
            //邮件标题。
            mailMessage.Subject = "验证消息";
          string code =  VerifyCode();
            //邮件内容。
            mailMessage.Body = "【小智招聘】验证码:" + code + "，10分钟内可用。请勿向任何人泄露";
            var res = _memoryCache.Get(SendAddress);
            if (res==null)
            {
                _memoryCache.Set(SendAddress, code);
            }

            var res1 = _memoryCache.Get(SendAddress);
            //是否支持内容为HTML。
            //mailMessage.IsBodyHtml = true;
            //实例化一个SmtpClient类。
            SmtpClient client = new SmtpClient();
            client.Port = 587;
            //在这里使用的是qq邮箱，所以是smtp.qq.com，如果你使用的是126邮箱，那么就是smtp.126.com。
            //client.Host = "smtp.163.com";
            client.Host = "smtp.qq.com";
            //使用安全加密连接（是否启用SSL）
            client.EnableSsl = true;
            //设置超时时间
            //client.Timeout = 10000;
            //不和请求一块发送。
            client.UseDefaultCredentials = false;
            //验证发件人身份(发件人的邮箱，邮箱里的生成授权码);
            client.Credentials = new NetworkCredential("3534291457@qq.com", "pttoxjuwzgsrdbab");//szcodirtgvjgbfii
                                                                                                //网易邮箱客户端授权码DJURBEKTXEWXQATX
                                                                                                //client.Credentials = new NetworkCredential("liulijun3236@163.com", "ZAJDNCKWHUBHQIMY");
            try
            {
                //发送
                client.Send(mailMessage);
                return true;
                //发送成功
            }
            catch (Exception)//发送异常
            {
                //发送失败
                //System.IO.File.WriteAllText(@"C:\test.txt", e.ToString(), Encoding.UTF8);
                return false;
            }
        }
    }
}
